#include<iostream>
#include"heap.h"                     //堆排序；
using namespace std;

/*void poprank(int *&a,int size)    //冒泡排序
{
    int n=size-1;
    while(n>0)
    {
        for(int i=0;i<n;i++)
        {
            if(a[i]>a[i+1])
            {
                int d=a[i];
                a[i]=a[i+1];
                a[i+1]=d;
            }
        }
        n--;
    }
}*/
int main()
{
    int account,n;   //n 是商品种类数
    int * a,*b,*c;   // a存储商品与折扣卷组合，b存储商品价格,c存储折扣卷；
    cin>>n;
    if(n==0)  return 0;
    cin>>account;
    a=new int[n*n];
    b=new int [n];
    c=new int [n];
    int min_b;   //最低商品价格；
    for(int i=0;i<n;i++)
    {
        cin>>b[i];
        min_b=b[i];
        if(i!=0&&b[i-1]<min_b)  //逐一比较获得min_b，同时将商品价格读取到b中;
        {
            min_b=b[i-1];

        }
    }

    for(int i=0;i<n;i++)
    {
        cin>>c[i];       //读取折扣卷价格到c；
    }
    int size=0;          //低于最低商品价格的商品折扣卷组合的个数
    for(int j=0;j<n;j++)
    {
        for(int i=0;i<n;i++)
        {
            int e=0;
            e=b[j]-c[i];
            if(e<min_b)
            {
                a[size]=e;      //将低于最低商品价格的商品折扣卷组合存储到a；
                size++;
            }
        }
    }
    heap t(size,a);
    t.rank();         //将a按升序排列；
    int number=0;     //number 购买的商品数量
    int remain=account;
    for(int i=0;i<size;i++)
    {
        if(remain<a[i]) break;
        remain-=a[i];           //贪心：从余额中依次扣除最低的组合，直到余额不足；
        number++;
    }
    number+=remain/min_b;   //检验是否足以继续购买最低价格商品并计算最终购买数；
    remain-=(remain/min_b)*min_b;//计算最终余额；
    cout<<number<<" "<<remain;
    return 0;
}